Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


RNS/Utilities/rngit/util.py 72aace40d3b3edf0557c5dfeb3f19012971e711f (72aace40) Text, 17.82 KB

T8b949e# Reticulum License
T8b949e#
T8b949e# Copyright (c) 2016-2026 Mark Qvist
T8b949e#
T8b949e# Permission is hereby granted, free of charge, to any person obtaining a copy
T8b949e# of this software and associated documentation files (the "Software"), to deal
T8b949e# in the Software without restriction, including without limitation the rights
T8b949e# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
T8b949e# copies of the Software, and to permit persons to whom the Software is
T8b949e# furnished to do so, subject to the following conditions:
T8b949e#
T8b949e# - The Software shall not be used in any kind of system which includes amongst
T8b949e# its functions the ability to purposefully do harm to human beings.
T8b949e#
T8b949e# - The Software shall not be used, directly or indirectly, in the creation of
T8b949e# an artificial intelligence, machine learning or language model training
T8b949e# dataset, including but not limited to any use that contributes to the
T8b949e# training or development of such a model or algorithm.
T8b949e#
T8b949e# - The above copyright notice and this permission notice shall be included in
T8b949e# all copies or substantial portions of the Software.
T8b949e#
T8b949e# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
T8b949e# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
T8b949e# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
T8b949e# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
T8b949e# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
T8b949e# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
T8b949e# SOFTWARE.

Tff7b72import T7ee787re
Tff7b72import T7ee787RNS

Tff7b72class T56d364MarkdownToMicronTb4b4b4:
Te6edf3BOLD Tff7b72= Ta5d6ff"Ta5d6ff`!Ta5d6ff"
Te6edf3BOLD_END Tff7b72= Ta5d6ff"Ta5d6ff`!Ta5d6ff"
Te6edf3ITALIC Tff7b72= Ta5d6ff"Ta5d6ff`*Ta5d6ff"
Te6edf3ITALIC_END Tff7b72= Ta5d6ff"Ta5d6ff`*Ta5d6ff"
Te6edf3UNDERLINE Tff7b72= Ta5d6ff"Ta5d6ff`_Ta5d6ff"
Te6edf3UNDERLINE_END Tff7b72= Ta5d6ff"Ta5d6ff`_Ta5d6ff"
Te6edf3CODE_BG Tff7b72= Ta5d6ff"Ta5d6ff`BT282828Ta5d6ff"
Te6edf3CODE_BG_INLINE Tff7b72= Ta5d6ff"Ta5d6ff`BT383838Ta5d6ff"
Te6edf3CODE_FG Tff7b72= Ta5d6ff"Ta5d6ff`FdddTa5d6ff"
Te6edf3CODE_RESET Tff7b72= Ta5d6ff"Ta5d6ff`f`bTa5d6ff"
Te6edf3LITERAL_START Tff7b72= Ta5d6ff"Ta5d6ff`=Ta5d6ff"
Te6edf3LITERAL_END Tff7b72= Ta5d6ff"Ta5d6ff`=Ta5d6ff"
Te6edf3BULLET Tff7b72= Ta5d6ff"Ta5d6ff•Ta5d6ff"
T8b949e# Regex patterns for markdown elements
Te6edf3HEADER_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff^(#Ta5d6ff{Ta5d6ff1,6})Ta5d6ff\Ta5d6ffs+(.+)$Ta5d6ff'Tb4b4b4)
Te6edf3CODE_FENCE_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff^(Ta5d6ff\Ta5d6ffs*)```(.*)$Ta5d6ff'Tb4b4b4)
Te6edf3HORIZONTAL_RULE_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff^(Ta5d6ff\Ta5d6ffs*)(---+|===+|Ta5d6ff\Ta5d6ff*Ta5d6ff\Ta5d6ff*Ta5d6ff\Ta5d6ff*+|___+)Ta5d6ff\Ta5d6ffs*$Ta5d6ff'Tb4b4b4)
Te6edf3UNORDERED_LIST_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff^(Ta5d6ff\Ta5d6ffs*)([-*+])Ta5d6ff\Ta5d6ffs+(.+)$Ta5d6ff'Tb4b4b4)
T8b949e# Table patterns
Te6edf3TABLE_ROW_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff^Ta5d6ff\Ta5d6ffs*Ta5d6ff\Ta5d6ff|?(.+?)Ta5d6ff\Ta5d6ff|?Ta5d6ff\Ta5d6ffs*$Ta5d6ff'Tb4b4b4)
Te6edf3TABLE_SEP_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff^Ta5d6ff\Ta5d6ffs*Ta5d6ff\Ta5d6ff|?(?:Ta5d6ff\Ta5d6ffs*:?-+:?Ta5d6ff\Ta5d6ffs*Ta5d6ff\Ta5d6ff|)+Ta5d6ff\Ta5d6ffs*$Ta5d6ff'Tb4b4b4)
T8b949e# Inline patterns (processed in order of specificity)
Te6edf3LINK_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff\Ta5d6ff[([^Ta5d6ff\Ta5d6ff]]+)Ta5d6ff\Ta5d6ff]Ta5d6ff\Ta5d6ff(([^)]+)Ta5d6ff\Ta5d6ff)Ta5d6ff'Tb4b4b4)
Te6edf3INLINE_CODE_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff`([^`]+)`Ta5d6ff'Tb4b4b4)
Te6edf3BOLD_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff\Ta5d6ff*Ta5d6ff\Ta5d6ff*(.+?)Ta5d6ff\Ta5d6ff*Ta5d6ff\Ta5d6ff*|__(.+?)__Ta5d6ff'Tb4b4b4)
Te6edf3ITALIC_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff\Ta5d6ff*(.+?)Ta5d6ff\Ta5d6ff*|_(.+?)_Ta5d6ff'Tb4b4b4)

Te6edf3TABLE_H Tff7b72= Ta5d6ff"Ta5d6ff─Ta5d6ff"
Te6edf3TABLE_V Tff7b72= Ta5d6ff"Ta5d6ff│Ta5d6ff"
Te6edf3TABLE_TL Tff7b72= Ta5d6ff"Ta5d6ff┌Ta5d6ff"
Te6edf3TABLE_TR Tff7b72= Ta5d6ff"Ta5d6ff┐Ta5d6ff"
Te6edf3TABLE_BL Tff7b72= Ta5d6ff"Ta5d6ff└Ta5d6ff"
Te6edf3TABLE_BR Tff7b72= Ta5d6ff"Ta5d6ff┘Ta5d6ff"
Te6edf3TABLE_ML Tff7b72= Ta5d6ff"Ta5d6ff├Ta5d6ff"
Te6edf3TABLE_MR Tff7b72= Ta5d6ff"Ta5d6ff┤Ta5d6ff"
Te6edf3TABLE_TM Tff7b72= Ta5d6ff"Ta5d6ff┬Ta5d6ff"
Te6edf3TABLE_BM Tff7b72= Ta5d6ff"Ta5d6ff┴Ta5d6ff"
Te6edf3TABLE_MM Tff7b72= Ta5d6ff"Ta5d6ff┼Ta5d6ff"
Te6edf3TABLE_MIN_COL_WIDTH Tff7b72= T79c0ff3

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3max_widthTff7b72=T79c0ff100Tb4b4b4, Te6edf3syntax_highlighterTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmax_width Tff7b72= Te6edf3max_width
Tff7b72selfTff7b72.Td2a8ffsyntax_highlighter Tff7b72= Te6edf3syntax_highlighter
Tff7b72selfTff7b72.Td2a8ffwcwidth Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Tff7b72import T7ee787wcwidth
Tff7b72selfTff7b72.Td2a8ffwcwidth Tff7b72= Te6edf3wcwidth

Tff7b72exceptTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffThe wcwidth module is unavailable, display width calculations for some glyphs will be incorrectTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)

Tff7b72def Td2a8ffdisplay_widthTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3textTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffwcwidthTb4b4b4: Tff7b72return Tffa657lenTb4b4b4(Te6edf3textTb4b4b4)
Tff7b72elseTb4b4b4:
T8b949e# wcswidth returns -1 for non-printable strings,
T8b949e# fallback to len in this case
Te6edf3w Tff7b72= Tff7b72selfTff7b72.Td2a8ffwcwidthTff7b72.Td2a8ffwcswidthTb4b4b4(Te6edf3textTb4b4b4)
Tff7b72return Te6edf3w Tff7b72if Te6edf3w Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3w Tff7b72>Tff7b72= T79c0ff0 Tff7b72else Tffa657lenTb4b4b4(Te6edf3textTb4b4b4)
Tff7b72def Td2a8ffformat_blockTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3textTb4b4b4)Tb4b4b4:
Te6edf3lines Tff7b72= Te6edf3textTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Tffea00\nTa5d6ff'Tb4b4b4)
Te6edf3result_lines Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3in_code_block Tff7b72= Tff7b72False
Te6edf3code_block_lang Tff7b72= Tff7b72None
Te6edf3code_buffer Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3in_table Tff7b72= Tff7b72False
Te6edf3table_buffer Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffflush_table_bufferTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72nonlocal Te6edf3result_linesTb4b4b4, Te6edf3table_bufferTb4b4b4, Te6edf3in_table
Tff7b72if Tff7b72not Te6edf3table_bufferTb4b4b4:
Te6edf3in_table Tff7b72= Tff7b72False
Tff7b72return
Tff7b72if Tffa657lenTb4b4b4(Te6edf3table_bufferTb4b4b4) Tff7b72>Tff7b72= T79c0ff2 Tff7b72and Tff7b72selfTff7b72.Td2a8ff_is_table_separatorTb4b4b4(Te6edf3table_bufferTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4:
Te6edf3formatted_lines Tff7b72= Tff7b72selfTff7b72.Td2a8ffformat_tableTb4b4b4(Te6edf3table_bufferTb4b4b4)
Te6edf3result_linesTff7b72.Td2a8ffextendTb4b4b4(Te6edf3formatted_linesTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72for Te6edf3line Tff7b72in Te6edf3table_bufferTb4b4b4: Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffformat_lineTb4b4b4(Te6edf3lineTb4b4b4)Tb4b4b4)
Te6edf3table_buffer Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3in_table Tff7b72= Tff7b72False
Tff7b72def Td2a8ffflush_code_blockTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72nonlocal Te6edf3result_linesTb4b4b4, Te6edf3code_bufferTb4b4b4, Te6edf3code_block_lang
Tff7b72if Tff7b72not Te6edf3code_bufferTb4b4b4:
Tff7b72return
Te6edf3code_content Tff7b72= Ta5d6ff'Tffea00\nTa5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3code_bufferTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsyntax_highlighter Tff7b72and Te6edf3code_block_langTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3highlighted Tff7b72= Tff7b72selfTff7b72.Td2a8ffsyntax_highlighterTff7b72.Td2a8ffhighlightTb4b4b4(Te6edf3code_contentTb4b4b4, Te6edf3languageTff7b72=Te6edf3code_block_langTb4b4b4)
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTff7b72.Td2a8ffCODE_BGTffd700}Tffd700{Tff7b72selfTff7b72.Td2a8ffCODE_FGTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3highlightedTb4b4b4)
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffCODE_RESETTb4b4b4)

Tff7b72except Tf85149ExceptionTb4b4b4:
T8b949e# Fallback to plain literal block on any error
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTff7b72.Td2a8ffCODE_BGTffd700}Tffd700{Tff7b72selfTff7b72.Td2a8ffCODE_FGTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffLITERAL_STARTTb4b4b4)
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_escape_literalsTb4b4b4(Te6edf3code_contentTb4b4b4)Tb4b4b4)
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffLITERAL_ENDTb4b4b4)
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffCODE_RESETTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTff7b72.Td2a8ffCODE_BGTffd700}Tffd700{Tff7b72selfTff7b72.Td2a8ffCODE_FGTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffLITERAL_STARTTb4b4b4)
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_escape_literalsTb4b4b4(Te6edf3code_contentTb4b4b4)Tb4b4b4)
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffLITERAL_ENDTb4b4b4)
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffCODE_RESETTb4b4b4)
Te6edf3code_buffer Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3line Tff7b72in Te6edf3linesTb4b4b4:
Te6edf3is_fenceTb4b4b4, Te6edf3lang_hint Tff7b72= Tff7b72selfTff7b72.Td2a8ff_detect_code_fenceTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72if Te6edf3is_fenceTb4b4b4:
T8b949e# Flush any pending table before code fence
Te6edf3flush_table_bufferTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3in_code_blockTb4b4b4:
T8b949e# Opening fence, start buffering
Te6edf3in_code_block Tff7b72= Tff7b72True
Te6edf3code_block_lang Tff7b72= Te6edf3lang_hintTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72if Te6edf3lang_hint Tff7b72else Tff7b72None
Te6edf3code_buffer Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72elseTb4b4b4:
T8b949e# Closing fence, flush highlighted code
Te6edf3flush_code_blockTb4b4b4(Tb4b4b4)
Te6edf3in_code_block Tff7b72= Tff7b72False
Te6edf3code_block_lang Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3in_code_blockTb4b4b4:
T8b949e# Buffer code lines for later highlighting
Te6edf3code_bufferTff7b72.Td2a8ffappendTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_is_table_rowTb4b4b4(Te6edf3lineTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3in_tableTb4b4b4:
Te6edf3in_table Tff7b72= Tff7b72True
Te6edf3table_buffer Tff7b72= Tb4b4b4[Te6edf3lineTb4b4b4]
Tff7b72elseTb4b4b4: Te6edf3table_bufferTff7b72.Td2a8ffappendTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72elseTb4b4b4:
T8b949e# Line breaks table, flush buffer
Tff7b72if Te6edf3in_tableTb4b4b4: Te6edf3flush_table_bufferTb4b4b4(Tb4b4b4)
Te6edf3formatted Tff7b72= Tff7b72selfTff7b72.Td2a8ffformat_lineTb4b4b4(Te6edf3lineTb4b4b4)
Te6edf3result_linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3formattedTb4b4b4)
T8b949e# Handle unclosed structures
Tff7b72if Te6edf3in_tableTb4b4b4: Te6edf3flush_table_bufferTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3in_code_blockTb4b4b4:
T8b949e# Unclosed code block, flush what we have
Te6edf3flush_code_blockTb4b4b4(Tb4b4b4)
Tff7b72return Ta5d6ff'Tffea00\nTa5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3result_linesTb4b4b4)
Tff7b72def Td2a8ffformat_lineTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lineTb4b4b4, Te6edf3modeTff7b72=Ta5d6ff"Ta5d6ffnormalTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3mode Tff7b72== Ta5d6ff"Ta5d6ffcodeblockTa5d6ff"Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ff_escape_literalsTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffHORIZONTAL_RULE_RETff7b72.Td2a8ffmatchTb4b4b4(Te6edf3lineTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ff_format_horizontal_ruleTb4b4b4(Tb4b4b4)
Te6edf3header_match Tff7b72= Tff7b72selfTff7b72.Td2a8ffHEADER_RETff7b72.Td2a8ffmatchTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72if Te6edf3header_matchTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ff_format_headerTb4b4b4(Te6edf3header_matchTb4b4b4)
Te6edf3list_match Tff7b72= Tff7b72selfTff7b72.Td2a8ffUNORDERED_LIST_RETff7b72.Td2a8ffmatchTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72if Te6edf3list_matchTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ff_format_list_itemTb4b4b4(Te6edf3list_matchTb4b4b4)
Te6edf3line Tff7b72= Tff7b72selfTff7b72.Td2a8ff_format_inlineTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72return Te6edf3line
Tff7b72def Td2a8ff_format_inlineTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3textTb4b4b4)Tb4b4b4:
Te6edf3code_blocks Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffextract_codeTb4b4b4(Te6edf3matchTb4b4b4)Tb4b4b4:
Te6edf3code_blocksTff7b72.Td2a8ffappendTb4b4b4(Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4)
Tff7b72return Ta5d6fffTa5d6ff"Tffea00\x00Tffd700{Tffa657lenTb4b4b4(Te6edf3code_blocksTb4b4b4)Tff7b72-T79c0ff1Tffd700}Tffea00\x00Ta5d6ff"
Te6edf3text Tff7b72= Tff7b72selfTff7b72.Td2a8ffINLINE_CODE_RETff7b72.Td2a8ffsubTb4b4b4(Te6edf3extract_codeTb4b4b4, Te6edf3textTb4b4b4)
Te6edf3text Tff7b72= Tff7b72selfTff7b72.Td2a8ffBOLD_RETff7b72.Td2a8ffsubTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_bold_subTb4b4b4, Te6edf3textTb4b4b4)
Te6edf3text Tff7b72= Tff7b72selfTff7b72.Td2a8ffITALIC_RETff7b72.Td2a8ffsubTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_italic_subTb4b4b4, Te6edf3textTb4b4b4)
Te6edf3text Tff7b72= Tff7b72selfTff7b72.Td2a8ffLINK_RETff7b72.Td2a8ffsubTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_link_subTb4b4b4, Te6edf3textTb4b4b4)
Tff7b72def Td2a8ffrestore_codeTb4b4b4(Te6edf3matchTb4b4b4)Tb4b4b4:
Te6edf3idx Tff7b72= Tffa657intTb4b4b4(Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4)
Te6edf3content Tff7b72= Te6edf3code_blocksTb4b4b4[Te6edf3idxTb4b4b4]
T8b949e# Disabled for now
T8b949e# highlighted = self._highlight_inline_code(content)
T8b949e# if highlighted: return highlighted
T8b949e# Plain inline code formatting
Te6edf3content Tff7b72= Te6edf3contentTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff'Ta5d6ff`Ta5d6ff'Tb4b4b4, Ta5d6ff'Tffea00\\Ta5d6ff`Ta5d6ff'Tb4b4b4)
Tff7b72return Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTff7b72.Td2a8ffCODE_BG_INLINETffd700}Tffd700{Tff7b72selfTff7b72.Td2a8ffCODE_FGTffd700}Tffd700{Te6edf3contentTffd700}Tffd700{Tff7b72selfTff7b72.Td2a8ffCODE_RESETTffd700}Ta5d6ff"
Te6edf3text Tff7b72= Te6edf3reTff7b72.Td2a8ffsubTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff\Ta5d6ffx00(Ta5d6ff\Ta5d6ffd+)Ta5d6ff\Ta5d6ffx00Ta5d6ff'Tb4b4b4, Te6edf3restore_codeTb4b4b4, Te6edf3textTb4b4b4)
Tff7b72return Te6edf3text
Tff7b72def Td2a8ff_highlight_inline_codeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3contentTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffsyntax_highlighterTb4b4b4: Tff7b72return Tff7b72None
Tff7b72return Tff7b72selfTff7b72.Td2a8ffsyntax_highlighterTff7b72.Td2a8ffhighlightTb4b4b4(Te6edf3contentTb4b4b4, Te6edf3languageTff7b72=Tff7b72NoneTb4b4b4)
Tff7b72def Td2a8ff_bold_subTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3matchTb4b4b4)Tb4b4b4:
Te6edf3content Tff7b72= Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff1Tb4b4b4) Tff7b72or Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff2Tb4b4b4)
Tff7b72return Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTff7b72.Td2a8ffBOLDTffd700}Tffd700{Te6edf3contentTffd700}Tffd700{Tff7b72selfTff7b72.Td2a8ffBOLD_ENDTffd700}Ta5d6ff"
Tff7b72def Td2a8ff_italic_subTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3matchTb4b4b4)Tb4b4b4:
Te6edf3content Tff7b72= Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff1Tb4b4b4) Tff7b72or Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff2Tb4b4b4)
Tff7b72return Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTff7b72.Td2a8ffITALICTffd700}Tffd700{Te6edf3contentTffd700}Tffd700{Tff7b72selfTff7b72.Td2a8ffITALIC_ENDTffd700}Ta5d6ff"
Tff7b72def Td2a8ff_link_subTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3matchTb4b4b4)Tb4b4b4:
Te6edf3text Tff7b72= Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff1Tb4b4b4)
Te6edf3url Tff7b72= Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff2Tb4b4b4)
T8b949e# TODO: Evaluate best way to handle both normal and nomadnet URLs
Te6edf3text Tff7b72= Te6edf3textTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff'Ta5d6ff`Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4)
T8b949e# url = url.replace('`', '\\`')
Tff7b72return Ta5d6fffTa5d6ff"Ta5d6ff`!`[Tffd700{Te6edf3textTffd700}Ta5d6ff`Tffd700{Te6edf3urlTffd700}Ta5d6ff]`!Ta5d6ff"
Tff7b72def Td2a8ff_format_headerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3matchTb4b4b4)Tb4b4b4:
Te6edf3hashes Tff7b72= Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff1Tb4b4b4)
Te6edf3content Tff7b72= Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff2Tb4b4b4)
Te6edf3level Tff7b72= Tffa657lenTb4b4b4(Te6edf3hashesTb4b4b4)
Te6edf3prefix Tff7b72= Ta5d6ff"Ta5d6ff>Ta5d6ff" Tff7b72* Tffa657minTb4b4b4(Te6edf3levelTb4b4b4, T79c0ff6Tb4b4b4)
Tff7b72return Ta5d6fffTa5d6ff"Tffd700{Te6edf3prefixTffd700}Tffd700{Te6edf3contentTffd700}Ta5d6ff"
Tff7b72def Td2a8ff_format_list_itemTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3matchTb4b4b4)Tb4b4b4:
Te6edf3indent Tff7b72= Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff1Tb4b4b4)
Te6edf3content Tff7b72= Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff3Tb4b4b4)
Te6edf3content Tff7b72= Tff7b72selfTff7b72.Td2a8ff_format_inlineTb4b4b4(Te6edf3contentTb4b4b4)
Tff7b72return Ta5d6fffTa5d6ff"Tffd700{Te6edf3indentTffd700}Ta5d6ff Tffd700{Tff7b72selfTff7b72.Td2a8ffBULLETTffd700}Ta5d6ff Tffd700{Te6edf3contentTffd700}Ta5d6ff"
Tff7b72def Td2a8ff_format_horizontal_ruleTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff-Ta5d6ff"
Tff7b72def Td2a8ff_detect_code_fenceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lineTb4b4b4)Tb4b4b4:
Te6edf3match Tff7b72= Tff7b72selfTff7b72.Td2a8ffCODE_FENCE_RETff7b72.Td2a8ffmatchTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72if Te6edf3matchTb4b4b4:
T8b949e# match.group(2) contains everything after the backticks (language hint)
Tff7b72return Tff7b72TrueTb4b4b4, Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff2Tb4b4b4)
Tff7b72return Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6ff"
Tff7b72def Td2a8ff_is_table_rowTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lineTb4b4b4)Tb4b4b4:
Tff7b72if Ta5d6ff'Ta5d6ff|Ta5d6ff' Tff7b72not Tff7b72in Te6edf3lineTb4b4b4: Tff7b72return Tff7b72False
Te6edf3match Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_ROW_RETff7b72.Td2a8ffmatchTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72if Te6edf3match Tff7b72is Tff7b72NoneTb4b4b4: Tff7b72return Tff7b72False
Te6edf3content Tff7b72= Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72return Ta5d6ff'Ta5d6ff|Ta5d6ff' Tff7b72in Te6edf3content Tff7b72or Te6edf3lineTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff'Ta5d6ff|Ta5d6ff'Tb4b4b4)
Tff7b72def Td2a8ff_is_table_separatorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lineTb4b4b4)Tb4b4b4:
Tff7b72if Ta5d6ff'Ta5d6ff|Ta5d6ff' Tff7b72not Tff7b72in Te6edf3lineTb4b4b4: Tff7b72return Tff7b72False
Te6edf3match Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_SEP_RETff7b72.Td2a8ffmatchTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72return Te6edf3match Tff7b72is Tff7b72not Tff7b72None
Tff7b72def Td2a8ff_escape_literalsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3textTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3textTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff'Ta5d6ff`Ta5d6ff'Tb4b4b4, Ta5d6ff'Tffea00\\Ta5d6ff`Ta5d6ff'Tb4b4b4)

Tff7b72def Td2a8ffformat_tableTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3rowsTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3rowsTb4b4b4) Tff7b72< T79c0ff2Tb4b4b4: Tff7b72return Te6edf3rows
T8b949e# Parse header and separator
Te6edf3header_cells Tff7b72= Tff7b72selfTff7b72.Td2a8ff_parse_table_rowTb4b4b4(Te6edf3rowsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Te6edf3alignments Tff7b72= Tff7b72selfTff7b72.Td2a8ff_parse_table_alignmentsTb4b4b4(Te6edf3rowsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
T8b949e# Ensure alignment count matches header cells
Tff7b72while Tffa657lenTb4b4b4(Te6edf3alignmentsTb4b4b4) Tff7b72< Tffa657lenTb4b4b4(Te6edf3header_cellsTb4b4b4)Tb4b4b4: Te6edf3alignmentsTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff'Ta5d6ffleftTa5d6ff'Tb4b4b4)
Te6edf3alignments Tff7b72= Te6edf3alignmentsTb4b4b4[Tb4b4b4:Tffa657lenTb4b4b4(Te6edf3header_cellsTb4b4b4)Tb4b4b4]
T8b949e# Parse data rows
Te6edf3data_rows Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff2Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3rowsTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3cells Tff7b72= Tff7b72selfTff7b72.Td2a8ff_parse_table_rowTb4b4b4(Te6edf3rowsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)
Tff7b72while Tffa657lenTb4b4b4(Te6edf3cellsTb4b4b4) Tff7b72< Tffa657lenTb4b4b4(Te6edf3header_cellsTb4b4b4)Tb4b4b4: Te6edf3cellsTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3cells Tff7b72= Te6edf3cellsTb4b4b4[Tb4b4b4:Tffa657lenTb4b4b4(Te6edf3header_cellsTb4b4b4)Tb4b4b4]
Te6edf3data_rowsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3cellsTb4b4b4)
T8b949e# Calculate column widths based on content
Te6edf3num_cols Tff7b72= Tffa657lenTb4b4b4(Te6edf3header_cellsTb4b4b4)
Te6edf3col_widths Tff7b72= Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72* Te6edf3num_cols
Te6edf3all_rows Tff7b72= Tb4b4b4[Te6edf3header_cellsTb4b4b4] Tff7b72+ Te6edf3data_rows
Tff7b72for Te6edf3row Tff7b72in Te6edf3all_rowsTb4b4b4:
Tff7b72for Te6edf3iTb4b4b4, Te6edf3cell Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3rowTb4b4b4)Tb4b4b4:
Te6edf3formatted Tff7b72= Tff7b72selfTff7b72.Td2a8ff_format_inlineTb4b4b4(Te6edf3cellTb4b4b4)
T8b949e# Calculate visible width (excluding Micron tags)
Te6edf3width Tff7b72= Tff7b72selfTff7b72.Td2a8ff_visible_widthTb4b4b4(Te6edf3formattedTb4b4b4)
Te6edf3col_widthsTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Tffa657maxTb4b4b4(Te6edf3col_widthsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4, Te6edf3widthTb4b4b4)
T8b949e# Apply minimum width and calculate total
Te6edf3col_widths Tff7b72= Tb4b4b4[Tffa657maxTb4b4b4(Te6edf3wTb4b4b4, Tff7b72selfTff7b72.Td2a8ffTABLE_MIN_COL_WIDTHTb4b4b4) Tff7b72for Te6edf3w Tff7b72in Te6edf3col_widthsTb4b4b4]
T8b949e# Check max_width constraint
T8b949e# Total = sum of columns + 3 chars per column (space + 2 borders) + 1 for final border
Te6edf3total_width Tff7b72= Tffa657sumTb4b4b4(Te6edf3col_widthsTb4b4b4) Tff7b72+ Tb4b4b4(Te6edf3num_cols Tff7b72* T79c0ff3Tb4b4b4) Tff7b72+ T79c0ff1
Tff7b72if Te6edf3total_width Tff7b72> Tff7b72selfTff7b72.Td2a8ffmax_widthTb4b4b4:
T8b949e# Reduce widest columns proportionally
Te6edf3excess Tff7b72= Te6edf3total_width Tff7b72- Tff7b72selfTff7b72.Td2a8ffmax_width
Te6edf3indexed_widths Tff7b72= Tb4b4b4[Tb4b4b4(Te6edf3iTb4b4b4, Te6edf3wTb4b4b4) Tff7b72for Te6edf3iTb4b4b4, Te6edf3w Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3col_widthsTb4b4b4)Tb4b4b4]
Te6edf3indexed_widthsTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3xTb4b4b4: Tff7b72-Te6edf3xTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Tff7b72for Te6edf3iTb4b4b4, Te6edf3w Tff7b72in Te6edf3indexed_widthsTb4b4b4:
Tff7b72if Te6edf3excess Tff7b72<Tff7b72= T79c0ff0Tb4b4b4: Tff7b72break
Te6edf3reduction Tff7b72= Tffa657minTb4b4b4(Te6edf3excessTb4b4b4, Te6edf3w Tff7b72- Tff7b72selfTff7b72.Td2a8ffTABLE_MIN_COL_WIDTHTb4b4b4)
Te6edf3col_widthsTb4b4b4[Te6edf3iTb4b4b4] Tff7b72-Tff7b72= Te6edf3reduction
Te6edf3excess Tff7b72-Tff7b72= Te6edf3reduction
T8b949e# Build formatted table
Te6edf3result Tff7b72= Tb4b4b4[Tb4b4b4]
T8b949e# Center alignment start
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ff`cTa5d6ff"Tb4b4b4)
T8b949e# Top border
Te6edf3border Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_TL
Tff7b72for Te6edf3iTb4b4b4, Te6edf3w Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3col_widthsTb4b4b4)Tb4b4b4:
Te6edf3border Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_H Tff7b72* Tb4b4b4(Te6edf3w Tff7b72+ T79c0ff2Tb4b4b4)
Tff7b72if Te6edf3i Tff7b72< Tffa657lenTb4b4b4(Te6edf3col_widthsTb4b4b4) Tff7b72- T79c0ff1Tb4b4b4: Te6edf3border Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_TM
Tff7b72elseTb4b4b4: Te6edf3border Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_TR
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_escape_literalsTb4b4b4(Te6edf3borderTb4b4b4)Tb4b4b4)
T8b949e# Header row
Te6edf3header_line Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_V
Tff7b72for Te6edf3iTb4b4b4, Te6edf3cell Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3header_cellsTb4b4b4)Tb4b4b4:
Te6edf3formatted Tff7b72= Tff7b72selfTff7b72.Td2a8ff_format_inlineTb4b4b4(Te6edf3cellTb4b4b4)
Te6edf3padded Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pad_cellTb4b4b4(Te6edf3formattedTb4b4b4, Te6edf3col_widthsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4, Ta5d6ff'Ta5d6ffleftTa5d6ff'Tb4b4b4)
Te6edf3header_line Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff Tffd700{Te6edf3paddedTffd700}Ta5d6ff Tffd700{Tff7b72selfTff7b72.Td2a8ffTABLE_VTffd700}Ta5d6ff"
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_escape_literalsTb4b4b4(Te6edf3header_lineTb4b4b4)Tb4b4b4)
T8b949e# Separator row
Te6edf3sep_line Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_ML
Tff7b72for Te6edf3iTb4b4b4, Te6edf3w Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3col_widthsTb4b4b4)Tb4b4b4:
Te6edf3cell_width Tff7b72= Te6edf3w Tff7b72+ T79c0ff2
Tff7b72if Te6edf3alignmentsTb4b4b4[Te6edf3iTb4b4b4] Tff7b72== Ta5d6ff'Ta5d6ffcenterTa5d6ff'Tb4b4b4: Te6edf3sep_line Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff:Tffd700{Tff7b72selfTff7b72.Td2a8ffTABLE_H Tff7b72* Tb4b4b4(Te6edf3cell_width Tff7b72- T79c0ff2Tb4b4b4)Tffd700}Ta5d6ff:Ta5d6ff"
Tff7b72elif Te6edf3alignmentsTb4b4b4[Te6edf3iTb4b4b4] Tff7b72== Ta5d6ff'Ta5d6ffrightTa5d6ff'Tb4b4b4: Te6edf3sep_line Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTff7b72.Td2a8ffTABLE_H Tff7b72* Tb4b4b4(Te6edf3cell_width Tff7b72- T79c0ff1Tb4b4b4)Tffd700}Ta5d6ff:Ta5d6ff"
Tff7b72elseTb4b4b4: Te6edf3sep_line Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_H Tff7b72* Te6edf3cell_width
Tff7b72if Te6edf3i Tff7b72< Tffa657lenTb4b4b4(Te6edf3col_widthsTb4b4b4) Tff7b72- T79c0ff1Tb4b4b4: Te6edf3sep_line Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_MM
Tff7b72elseTb4b4b4: Te6edf3sep_line Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_MR

Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_escape_literalsTb4b4b4(Te6edf3sep_lineTb4b4b4)Tb4b4b4)
T8b949e# Data rows
Tff7b72for Te6edf3row Tff7b72in Te6edf3data_rowsTb4b4b4:
Te6edf3row_line Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_V
Tff7b72for Te6edf3iTb4b4b4, Te6edf3cell Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3rowTb4b4b4)Tb4b4b4:
Te6edf3formatted Tff7b72= Tff7b72selfTff7b72.Td2a8ff_format_inlineTb4b4b4(Te6edf3cellTb4b4b4)
Te6edf3padded Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pad_cellTb4b4b4(Te6edf3formattedTb4b4b4, Te6edf3col_widthsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4, Te6edf3alignmentsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)
Te6edf3row_line Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff Tffd700{Te6edf3paddedTffd700}Ta5d6ff Tffd700{Tff7b72selfTff7b72.Td2a8ffTABLE_VTffd700}Ta5d6ff"
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3row_lineTb4b4b4)
T8b949e# Bottom border
Te6edf3border Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_BL
Tff7b72for Te6edf3iTb4b4b4, Te6edf3w Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3col_widthsTb4b4b4)Tb4b4b4:
Te6edf3border Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_H Tff7b72* Tb4b4b4(Te6edf3w Tff7b72+ T79c0ff2Tb4b4b4)
Tff7b72if Te6edf3i Tff7b72< Tffa657lenTb4b4b4(Te6edf3col_widthsTb4b4b4) Tff7b72- T79c0ff1Tb4b4b4: Te6edf3border Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_BM
Tff7b72elseTb4b4b4: Te6edf3border Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffTABLE_BR
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_escape_literalsTb4b4b4(Te6edf3borderTb4b4b4)Tb4b4b4)
T8b949e# End center alignment
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ff`aTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3result
Tff7b72def Td2a8ff_parse_table_rowTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lineTb4b4b4)Tb4b4b4:
Te6edf3line Tff7b72= Te6edf3lineTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3lineTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff'Ta5d6ff|Ta5d6ff'Tb4b4b4)Tb4b4b4: Te6edf3line Tff7b72= Te6edf3lineTb4b4b4[T79c0ff1Tb4b4b4:Tb4b4b4]
Tff7b72if Te6edf3lineTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff'Ta5d6ff|Ta5d6ff'Tb4b4b4)Tb4b4b4: Te6edf3line Tff7b72= Te6edf3lineTb4b4b4[Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]
Te6edf3cells Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3current Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3escaped Tff7b72= Tff7b72False
Tff7b72for Te6edf3char Tff7b72in Te6edf3lineTb4b4b4:
Tff7b72if Te6edf3escapedTb4b4b4:
Te6edf3current Tff7b72+Tff7b72= Te6edf3char
Te6edf3escaped Tff7b72= Tff7b72False
Tff7b72elif Te6edf3char Tff7b72== Ta5d6ff'Tffea00\\Ta5d6ff'Tb4b4b4:
Te6edf3escaped Tff7b72= Tff7b72True
Tff7b72elif Te6edf3char Tff7b72== Ta5d6ff'Ta5d6ff|Ta5d6ff'Tb4b4b4:
Te6edf3cellsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3currentTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3current Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3current Tff7b72+Tff7b72= Te6edf3char
Te6edf3cellsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3currentTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3cells
Tff7b72def Td2a8ff_parse_table_alignmentsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lineTb4b4b4)Tb4b4b4:
Te6edf3cells Tff7b72= Tff7b72selfTff7b72.Td2a8ff_parse_table_rowTb4b4b4(Te6edf3lineTb4b4b4)
Te6edf3alignments Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3cell Tff7b72in Te6edf3cellsTb4b4b4:
Te6edf3cell Tff7b72= Te6edf3cellTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3cellTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff'Ta5d6ff:Ta5d6ff'Tb4b4b4) Tff7b72and Te6edf3cellTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff'Ta5d6ff:Ta5d6ff'Tb4b4b4)Tb4b4b4: Te6edf3alignmentsTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff'Ta5d6ffcenterTa5d6ff'Tb4b4b4)
Tff7b72elif Te6edf3cellTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff'Ta5d6ff:Ta5d6ff'Tb4b4b4)Tb4b4b4: Te6edf3alignmentsTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff'Ta5d6ffrightTa5d6ff'Tb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3alignmentsTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff'Ta5d6ffleftTa5d6ff'Tb4b4b4)
Tff7b72return Te6edf3alignments
Tff7b72def Td2a8ff_visible_widthTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3textTb4b4b4)Tb4b4b4:
Te6edf3text Tff7b72= Te6edf3reTff7b72.Td2a8ffsubTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff`[FB][0-9a-fA-F]Tffd700{3}Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4, Te6edf3textTb4b4b4)
Te6edf3text Tff7b72= Te6edf3reTff7b72.Td2a8ffsubTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff`[!*_]Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4, Te6edf3textTb4b4b4)
Te6edf3text Tff7b72= Te6edf3reTff7b72.Td2a8ffsubTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff`f`bTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4, Te6edf3textTb4b4b4)
Te6edf3text Tff7b72= Te6edf3reTff7b72.Td2a8ffsubTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff`fTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4, Te6edf3textTb4b4b4)
Te6edf3text Tff7b72= Te6edf3reTff7b72.Td2a8ffsubTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff`bTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4, Te6edf3textTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdisplay_widthTb4b4b4(Te6edf3textTb4b4b4)
Tff7b72def Td2a8ff_pad_cellTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3textTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3alignTb4b4b4)Tb4b4b4:
Te6edf3text Tff7b72= Tff7b72selfTff7b72.Td2a8ff_truncate_cellTb4b4b4(Te6edf3textTb4b4b4, Te6edf3widthTb4b4b4)
Te6edf3text_width Tff7b72= Tff7b72selfTff7b72.Td2a8ff_visible_widthTb4b4b4(Te6edf3textTb4b4b4)
Te6edf3padding Tff7b72= Te6edf3width Tff7b72- Te6edf3text_width
Tff7b72if Te6edf3align Tff7b72== Ta5d6ff'Ta5d6ffrightTa5d6ff'Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff Ta5d6ff" Tff7b72* Te6edf3padding Tff7b72+ Te6edf3text
Tff7b72elif Te6edf3align Tff7b72== Ta5d6ff'Ta5d6ffcenterTa5d6ff'Tb4b4b4:
Te6edf3left Tff7b72= Te6edf3padding Tff7b72/Tff7b72/ T79c0ff2
Te6edf3right Tff7b72= Te6edf3padding Tff7b72- Te6edf3left
Tff7b72return Ta5d6ff"Ta5d6ff Ta5d6ff" Tff7b72* Te6edf3left Tff7b72+ Te6edf3text Tff7b72+ Ta5d6ff"Ta5d6ff Ta5d6ff" Tff7b72* Te6edf3right
Tff7b72elseTb4b4b4:
Tff7b72return Te6edf3text Tff7b72+ Ta5d6ff"Ta5d6ff Ta5d6ff" Tff7b72* Te6edf3padding
Tff7b72def Td2a8ff_truncate_cellTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3textTb4b4b4, Te6edf3widthTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_visible_widthTb4b4b4(Te6edf3textTb4b4b4) Tff7b72<Tff7b72= Te6edf3widthTb4b4b4: Tff7b72return Te6edf3text
Te6edf3stripped Tff7b72= Te6edf3text
Te6edf3stripped Tff7b72= Te6edf3reTff7b72.Td2a8ffsubTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff`[FB][0-9a-fA-F]Tffd700{3}Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4, Te6edf3strippedTb4b4b4)
Te6edf3stripped Tff7b72= Te6edf3reTff7b72.Td2a8ffsubTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff`[!*_]Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4, Te6edf3strippedTb4b4b4)
Te6edf3stripped Tff7b72= Te6edf3reTff7b72.Td2a8ffsubTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff`f`bTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4, Te6edf3strippedTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3strippedTb4b4b4) Tff7b72<Tff7b72= Te6edf3width Tff7b72- T79c0ff1Tb4b4b4: Tff7b72return Te6edf3text
Te6edf3truncated Tff7b72= Te6edf3strippedTb4b4b4[Tb4b4b4:Te6edf3width Tff7b72- T79c0ff1Tb4b4b4] Tff7b72+ Ta5d6ff"Ta5d6ff…Ta5d6ff"
Tff7b72return Te6edf3truncated


Tff7b72def Td2a8ffconvert_markdown_to_micronTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4:
Te6edf3converter Tff7b72= Te6edf3MarkdownToMicronTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3converterTff7b72.Td2a8ffformat_blockTb4b4b4(Te6edf3textTb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────